{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from matplotlib.font_manager import FontProperties\n",
    "from matplotlib import font_manager\n",
    "from matplotlib import rcParams\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']  # 防止无法显示中文并设置黑体\n",
    "plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号\n",
    "\n",
    "TimesSong = FontProperties(fname=\"C:\\\\Users\\\\Linzy\\\\Desktop\\\\TimesSong.ttf\")\n",
    "font_manager.fontManager.addfont(\"C:\\\\Users\\\\Linzy\\\\Desktop\\\\TimesSong.ttf\")\n",
    "\n",
    "# 全局设置字体及大小，设置公式字体即可\n",
    "config = {\n",
    "    \"mathtext.fontset\": 'stix',\n",
    "    \"font.family\": 'serif',\n",
    "    \"font.serif\": ['TimesSong'],\n",
    "    'axes.unicode_minus': False,  # 处理负号，即-号\n",
    "    \"font.size\": 12\n",
    "}\n",
    "\n",
    "rcParams.update(config)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "fulidf=pd.read_excel('./xianClimate.xlsx')\n",
    "fulidf=fulidf[fulidf['年(年)'].isin(range(2009,2023,1))]\n",
    "fulidf=fulidf.replace(999999,np.nan)\n",
    "fulidf=fulidf.replace(999990.0,np.nan)\n",
    "fulidf=fulidf.replace(999998.0,np.nan)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "staname=fulidf['站名'].drop_duplicates().reset_index(drop=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "with open(\"D:\\\\_work\\\\project\\\\HZYWsystem\\\\statics\\\\webgis\\\\map\\\\qyqxsta.json\") as f:\n",
    "    qydata=json.load(f)\n",
    "with open(\"D:\\\\_work\\\\project\\\\HZYWsystem\\\\statics\\\\webgis\\\\map\\\\guoqxsta.json\") as f:\n",
    "    guojiadata=json.load(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "qyname=list(qydata['A3'].values())\n",
    "qyname"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "lonqy=list(qydata['A5'].values())\n",
    "lonqy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "latqy=list(qydata['A6'].values())\n",
    "latqy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def backTrrain(fulidf,staname_i):    \n",
    "    fulidf1=fulidf[fulidf['站名']==staname_i].reset_index()\n",
    "    T=fulidf1['平均气温(摄氏度(℃))'].mean(skipna=True)\n",
    "    ymin=fulidf1['年(年)'].min()\n",
    "    ymax=fulidf1['年(年)'].max()\n",
    "    rainlist=[]\n",
    "    for i in range(ymin,ymax+1,1):\n",
    "        rainlist.append(fulidf1[fulidf1['年(年)']==i]['20-20时降水量(毫米)'].sum())\n",
    "    rain=np.mean(rainlist).round(2)\n",
    "    return T,rain"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "alllist=[]\n",
    "for i in staname:\n",
    "    T,rain=backTrrain(fulidf,i)\n",
    "    alllist.append([i,T,rain])\n",
    "alllist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "fulidf1=fulidf[fulidf['站名']=='富川福利气象观测站'].reset_index()\n",
    "fulidf1['年(年)'].min(),fulidf1['年(年)'].max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "fcdatadf=pd.DataFrame(alllist,columns=['staname', 'T', 'rain'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "indexsta=[]\n",
    "for i in fcdatadf['staname'][1:]:\n",
    "    indexsta.append(qyname.index(i))\n",
    "indexsta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "lonlist=[]\n",
    "latlist=[]\n",
    "lonlist.append(list(guojiadata['A5'].values())[0])\n",
    "latlist.append(list(guojiadata['A6'].values())[0])\n",
    "for i in indexsta:\n",
    "    lonlist.append(lonqy[i])\n",
    "    latlist.append(latqy[i])\n",
    "lonlist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "fcdatadf['lon']=lonlist\n",
    "fcdatadf['lat']=latlist\n",
    "fcdatadf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "Tfc=fcdatadf[fcdatadf['T']>0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 插值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.interpolate import griddata\n",
    "from metpy.interpolate import inverse_distance_to_grid\n",
    "import matplotlib.ticker as ticker\n",
    "import matplotlib.patches as mpatches\n",
    "import cartopy.crs as ccrs\n",
    "from cartopy.io.shapereader import Reader\n",
    "import cartopy.feature as cfeature\n",
    "from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter\n",
    "# 插值\n",
    "from pykrige import OrdinaryKriging\n",
    "### 白化关键包\n",
    "import geopandas as gpd\n",
    "from matplotlib.path import Path\n",
    "from cartopy.mpl.patch import geos_to_path"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "shp=gpd.read_file(r\"D:\\_work\\mapdata\\fuchuan\\geojson.shp\",encoding='UTF-8')\n",
    "shp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.array(list(shp['geometry'][0].exterior.coords))[:,1].min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_north(ax, labelsize=12, loc_x=0.05, loc_y=1.07, width=0.03, height=0.045, pad=0.14):\n",
    "    \"\"\"\n",
    "    画一个比例尺带'N'文字注释\n",
    "    主要参数如下\n",
    "    :param ax: 要画的坐标区域 Axes实例 plt.gca()获取即可\n",
    "    :param labelsize: 显示'N'文字的大小\n",
    "    :param loc_x: 以文字下部为中心的占整个ax横向比例\n",
    "    :param loc_y: 以文字下部为中心的占整个ax纵向比例\n",
    "    :param width: 指南针占ax比例宽度\n",
    "    :param height: 指南针占ax比例高度\n",
    "    :param pad: 文字符号占ax比例间隙\n",
    "    :return: None\n",
    "    \"\"\"\n",
    "    minx, maxx = ax.get_xlim()\n",
    "    miny, maxy = ax.get_ylim()\n",
    "    ylen = maxy - miny\n",
    "    xlen = maxx - minx\n",
    "    left = [minx + xlen*(loc_x - width*.5), miny + ylen*(loc_y - pad)]\n",
    "    right = [minx + xlen*(loc_x + width*.5), miny + ylen*(loc_y - pad)]\n",
    "    top = [minx + xlen*loc_x, miny + ylen*(loc_y - pad + height)]\n",
    "    center = [minx + xlen*loc_x, left[1] + (top[1] - left[1])*.4]\n",
    "    triangle = mpatches.Polygon([left, top, right, center], color='k')\n",
    "    ax.text(s='N',\n",
    "            x=minx + xlen*loc_x,\n",
    "            y=miny + ylen*(loc_y - pad + height),\n",
    "            fontsize=labelsize,\n",
    "            horizontalalignment='center',\n",
    "            verticalalignment='bottom')\n",
    "    ax.add_patch(triangle)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAJXRFWHRUaXRsZQB0cnVuYyhCbHVlcywwLjQwLDEuMDApIGNvbG9ybWFwN9RTMQAAACt0RVh0RGVzY3JpcHRpb24AdHJ1bmMoQmx1ZXMsMC40MCwxLjAwKSBjb2xvcm1hcLemzgAAAAAwdEVYdEF1dGhvcgBNYXRwbG90bGliIHYzLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZyqv+E0AAAAydEVYdFNvZnR3YXJlAE1hdHBsb3RsaWIgdjMuNy4xLCBodHRwczovL21hdHBsb3RsaWIub3JnBAlnagAAAfdJREFUeJzt1k1awjAUhtHq/mduyXW4lMYJoL3h0qg4+s6ZaEvzQ0Cf9+Xt/WNs34zL1ajXl1/26f5tZDNuO4y73hiHUfPzo8x3/WWf9nfY/oP1R7PO/X3Vdba6r+6cun2djD+bfzq38rl098v0/Trl/rTvss7p+1r8Xszj7q//dd3Mt7rv1c+p3UdzbmOU59aen55++nwnn8t0vvfn6/bz8/N71nx1YJ23eb5+X7rrk/Ncfe7f9r04/ln7Xj6n23X9Q9vL/ebn9P6ur+/luW69Zr7pH8Av57u9XsZP85/tq1tvP1z+fb7H5/u6AQBxBAAABBIAABBIAABAIAEAAIEEAAAEEgAAEEgAAEAgAQAAgQQAAAQSAAAQSAAAQCABAACBBAAABBIAABBIAABAIAEAAIEEAAAEEgAAEEgAAEAgAQAAgQQAAAQSAAAQSAAAQCABAACBBAAABBIAABBIAABAIAEAAIEEAAAEEgAAEEgAAEAgAQAAgQQAAAQSAAAQSAAAQCABAACBBAAABBIAABBIAABAIAEAAIEEAAAEEgAAEEgAAEAgAQAAgQQAAAQSAAAQSAAAQCABAACBBAAABBIAABBIAABAIAEAAIEEAAAEEgAAEEgAAEAgAQAAgQQAAAQSAAAQSAAAQCABAACBBAAABBIAABDoE7AyijFEs2XjAAAAAElFTkSuQmCC",
      "text/html": [
       "<div style=\"vertical-align: middle;\"><strong>trunc(Blues,0.40,1.00)</strong> </div><div class=\"cmap\"><img alt=\"trunc(Blues,0.40,1.00) colormap\" title=\"trunc(Blues,0.40,1.00)\" style=\"border: 1px solid #555;\" src=\"\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#94c4dfff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #94c4dfff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#08306bff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #08306bff;\"></div></div>"
      ],
      "text/plain": [
       "<matplotlib.colors.LinearSegmentedColormap at 0x2bd3e05d5d0>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import matplotlib.colors as colors\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "def truncate_colormap(cmap, minval=0.0, maxval=1.0, n=100):\n",
    "    new_cmap = colors.LinearSegmentedColormap.from_list(\n",
    "        \"trunc({n},{a:.2f},{b:.2f})\".format(n=cmap.name, a=minval, b=maxval),\n",
    "        cmap(np.linspace(minval, maxval, n)),\n",
    "    )\n",
    "    return new_cmap\n",
    "cmap = plt.get_cmap(\"Blues\")\n",
    "trunc_cmap1 = truncate_colormap(cmap, 0.4, 1)\n",
    "trunc_cmap1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "extent=[110.99778373704645,111.56357963548395,24.461242833894357,25.129462933561904]\n",
    "lon_target = np.arange(111.08795,111.515133,0.001)\n",
    "lat_target = np.arange(24.593434,25.18245,0.001)\n",
    "x_t, y_t = np.meshgrid(lon_target, lat_target)\n",
    "# model=OrdinaryKriging(fcdatadf['lon'].values,fcdatadf['lat'].values,fcdatadf['rain'].values,variogram_model='gaussian',nlags=500)\n",
    "model=OrdinaryKriging(fcdatadf['lon'].values,fcdatadf['lat'].values,fcdatadf['rain'].values,variogram_model='linear',nlags=100)\n",
    "ds1,ds2=model.execute('grid',lon_target,lat_target)\n",
    "ds1=np.round(ds1,3)\n",
    "\n",
    "fig=plt.figure(figsize=(9,16))\n",
    "ax=fig.add_axes([0.1,0.1,0.8,0.8],projection=ccrs.PlateCarree())\n",
    "ax1=fig.add_axes([0.11,0.20,0.04,0.15])\n",
    "ax2=fig.add_axes([0.79,0.75,0.05*(16/9),0.05])\n",
    "ax2.set_axis_off()\n",
    "ax3=fig.add_axes([0.59,0.195,0.18*(16/9),0.025])\n",
    "ax3.set_axis_off()\n",
    "# arrimg=plt.imread(r\"C:\\Users\\Linzy\\Desktop\\chinaclimate.png\")\n",
    "arrimg=plt.imread(r\"C:\\Users\\Linzy\\Desktop\\图片231201(1)(1).png\")\n",
    "# arrimg1=plt.imread(r\"C:\\Users\\Linzy\\Desktop\\bili.png\")\n",
    "arrimg1=plt.imread(r\"C:\\Users\\Linzy\\Downloads\\IMG_202312015885_719x126.png\")\n",
    "ax2.imshow(arrimg)\n",
    "ax3.imshow(arrimg1)\n",
    "ax.add_geometries(Reader(r\"D:\\_work\\mapdata\\fuchuan\\geojson.shp\").geometries(),ccrs.PlateCarree(),facecolor='none', edgecolor='b', linewidth=0.8)\n",
    "color=ax.contourf(x_t,y_t,ds1,levels=np.linspace(1420,1800,50),cmap=trunc_cmap1,transform=ccrs.PlateCarree())\n",
    "\n",
    "for i in range(0,len(fcdatadf),1):\n",
    "    ha='left'\n",
    "    staname=fcdatadf['staname'].values[i][2:-5]\n",
    "    if i==0:\n",
    "        staname=fcdatadf['staname'].values[i][2:]\n",
    "        ha='right'\n",
    "    if i in [22,23,25]:\n",
    "        staname=fcdatadf['staname'].values[i][2:-7]\n",
    "    if i in [2,22,27,21]:\n",
    "        ha='right'\n",
    "\n",
    "    ax.scatter(fcdatadf['lon'].values[i],fcdatadf['lat'].values[i],color='black',transform=ccrs.PlateCarree())\n",
    "    ax.text(fcdatadf['lon'].values[i],fcdatadf['lat'].values[i],staname,ha=ha,color='black',transform=ccrs.PlateCarree())\n",
    "\n",
    "# cb.ax.get_xaxis().get_major_formatter().set_scientific(False)\n",
    "## 关键操作：生成裁剪路径\n",
    "path_clip =Path.make_compound_path(*geos_to_path(shp['geometry'].to_list()))\n",
    "## 关键操作：将裁剪路径应用到图层\n",
    "for collection in color.collections:\n",
    "    collection.set_clip_path(path_clip,transform=ax.transData)\n",
    "cb=fig.colorbar(color,ticks=np.linspace(1420,1800,5),cax=ax1)\n",
    "cb.formatter = ticker.ScalarFormatter(useMathText=False)\n",
    "cb.ax.set_title('降水量\\nmm',fontdict={'size':10})\n",
    "cb.update_ticks()\n",
    "add_north(ax)\n",
    "# add_scalebar(ax)\n",
    "fig.savefig('./jiangshuiFC1.png',dpi=800,facecolor='white',bbox_inches='tight')\n",
    "ds1.min(),ds1.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.linspace(1420,1800,5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "Tfc.reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAI3RFWHRUaXRsZQB0cnVuYyhqZXQsMC40MCwwLjgwKSBjb2xvcm1hcKyxh1oAAAApdEVYdERlc2NyaXB0aW9uAHRydW5jKGpldCwwLjQwLDAuODApIGNvbG9ybWFw4fVRxAAAADB0RVh0QXV0aG9yAE1hdHBsb3RsaWIgdjMuNy4xLCBodHRwczovL21hdHBsb3RsaWIub3JnKq/4TQAAADJ0RVh0U29mdHdhcmUATWF0cGxvdGxpYiB2My43LjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcECWdqAAABlUlEQVR4nO3WUU7CQBRA0Qeuxv2vwyXR+kExsYRoNIDxnvMzGd6knZB+3MPr+rbOzBxmnc/rMjMzx6vfzX8yf5nTtl8+rY++1+33/nb+t/7v/z7ff0eX7+vZ93r4fN3m62W/W5cb8+Wyn/P8fOxjf9jtj9u6XWdmd25uzK/23z13r+d8de6ynnbrs+/l/Xd5znEAgBwBAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACDoHVm0CfRALSDmAAAAAElFTkSuQmCC",
      "text/html": [
       "<div style=\"vertical-align: middle;\"><strong>trunc(jet,0.40,0.80)</strong> </div><div class=\"cmap\"><img alt=\"trunc(jet,0.40,0.80) colormap\" title=\"trunc(jet,0.40,0.80)\" style=\"border: 1px solid #555;\" src=\"\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#29ffceff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #29ffceff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#ff6800ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #ff6800ff;\"></div></div>"
      ],
      "text/plain": [
       "<matplotlib.colors.LinearSegmentedColormap at 0x2bd3a5f62f0>"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cmap = plt.get_cmap(\"jet\")\n",
    "trunc_cmap = truncate_colormap(cmap, 0.4, 0.8)\n",
    "trunc_cmap"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "extent=[110.99778373704645,111.56357963548395,24.461242833894357,25.129462933561904]\n",
    "lon_target = np.arange(111.08795,111.515133,0.001)\n",
    "lat_target = np.arange(24.593434,25.18245,0.001)\n",
    "x_t, y_t = np.meshgrid(lon_target, lat_target)\n",
    "# model=OrdinaryKriging(Tfc['lon'].values,Tfc['lat'].values,Tfc['T'].values,variogram_model='gaussian',nlags=100)\n",
    "model=OrdinaryKriging(Tfc['lon'].values,Tfc['lat'].values,Tfc['T'].values,variogram_model='linear',nlags=50)\n",
    "# model=OrdinaryKriging(fcdatadf['lon'].values,fcdatadf['lat'].values,fcdatadf['rain'].values,variogram_model='linear',nlags=1)\n",
    "ds1,ds2=model.execute('grid',lon_target,lat_target)\n",
    "ds1=np.round(ds1,3)\n",
    "\n",
    "fig=plt.figure(figsize=(9,16))\n",
    "ax=fig.add_axes([0.1,0.1,0.8,0.8],projection=ccrs.PlateCarree())\n",
    "ax1=fig.add_axes([0.11,0.20,0.04,0.15])\n",
    "ax2=fig.add_axes([0.79,0.75,0.05*(16/9),0.05])\n",
    "ax2.set_axis_off()\n",
    "ax3=fig.add_axes([0.59,0.195,0.18*(16/9),0.025])\n",
    "ax3.set_axis_off()\n",
    "# arrimg=plt.imread(r\"C:\\Users\\Linzy\\Desktop\\chinaclimate.png\")\n",
    "arrimg=plt.imread(r\"C:\\Users\\Linzy\\Desktop\\图片231201(1)(1).png\")\n",
    "# arrimg1=plt.imread(r\"C:\\Users\\Linzy\\Desktop\\bili.png\")\n",
    "arrimg1=plt.imread(r\"C:\\Users\\Linzy\\Downloads\\IMG_202312015885_719x126.png\")\n",
    "ax2.imshow(arrimg)\n",
    "ax3.imshow(arrimg1)\n",
    "ax.add_geometries(Reader(r\"D:\\_work\\mapdata\\fuchuan\\geojson.shp\").geometries(),ccrs.PlateCarree(),facecolor='none', edgecolor='b', linewidth=0.8)\n",
    "color=ax.contourf(x_t,y_t,ds1,levels=np.linspace(18,21,70),cmap=trunc_cmap,transform=ccrs.PlateCarree())\n",
    "\n",
    "for i in range(0,len(Tfc),1):\n",
    "    staname=Tfc['staname'].values[i][2:-5]\n",
    "    ha='left'\n",
    "    if i==0:\n",
    "        staname=Tfc['staname'].values[i][2:]\n",
    "        ha='right'\n",
    "    if i in [8,9,11]:\n",
    "         staname=Tfc['staname'].values[i][2:-7]\n",
    "    if i in [13]:\n",
    "        ha='right'\n",
    "\n",
    "    ax.scatter(Tfc['lon'].values[i],Tfc['lat'].values[i],color='black',transform=ccrs.PlateCarree())\n",
    "    ax.text(Tfc['lon'].values[i],Tfc['lat'].values[i],staname,ha=ha,color='black',transform=ccrs.PlateCarree())\n",
    "\n",
    "\n",
    "## 关键操作：生成裁剪路径\n",
    "path_clip =Path.make_compound_path(*geos_to_path(shp['geometry'].to_list()))\n",
    "## 关键操作：将裁剪路径应用到图层\n",
    "for collection in color.collections:\n",
    "    collection.set_clip_path(path_clip,transform=ax.transData)\n",
    "cb=fig.colorbar(color,ticks=np.linspace(18,21,4),cax=ax1)\n",
    "cb.formatter = ticker.ScalarFormatter(useMathText=False)\n",
    "cb.ax.set_title('温度\\n℃',fontdict={'size':10})\n",
    "cb.update_ticks()\n",
    "add_north(ax)\n",
    "fig.savefig('./wenduFC1.png',dpi=800,facecolor='white',bbox_inches='tight')\n",
    "ds1.min(),ds1.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<BarContainer object of 3 artists>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplots(1,2,dpi=100)\n",
    "plt.subplot(121)\n",
    "plt.plot([1,2,3])\n",
    "\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.plot([1,2,3])\n",
    "\n",
    "\n",
    "\n",
    "plt.axes([0.7, 0.2, 0.15, 0.15], ## [left, bottom, width, height]四个参数(fractions of figure)可以非常灵活的调节子图中子图的位置     \n",
    "        )\n",
    "plt.bar([1,2,3],[1,2,3],color=['r','b','g'])\n",
    "\n",
    "\n",
    "plt.axes([0.2, 0.7, 0.15, 0.15], \n",
    "        )\n",
    "plt.bar([1,2,3],[1,2,3],color=['r','b','g'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py310",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
